package net.zapasa.modelo.parser.util;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class Tags {
	
	private List<Tag> tags;
	
	public Tags(){
		tags = new ArrayList<Tag>();
	}
	
	public void addTag(String nombre, List<String> atributos){
		tags.add(new Tag(nombre, atributos));
	}
	
	public void removeLastTag(){
		if(tags.size()>0){
			tags.remove(tags.size()-1);
		}
	}
	
	public boolean existe(String nombre){
		return tags.contains(new Tag(nombre, new ArrayList<String>()));
	}
	
	public boolean existe(String nombre, String...  atributo){
		ArrayList<String> atributos = new ArrayList<String>(Arrays.asList(atributo));
		return tags.contains(new Tag(nombre, atributos));
	}
	
	public List<String> getAtributosTag(String nombre){
		List<String> atributos = new ArrayList<String>();
		for(Tag t : tags){
			if(t.nombre.equals(nombre)){
				atributos.addAll(t.atributos);
				break;
			}
		}
		return atributos;
	}
	
	@Override
	public String toString() {
		String texto = "";
		for(Tag t:tags){
			texto+= "TAG: " + t + "\n";
		}
		
		return texto;
	}

	/**
	 * Clase privada para la lista de Tags
	 * @author azapata
	 *
	 */
	private class Tag {
		private String nombre;
		private List<String> atributos = new ArrayList<String>();
		
		public Tag(String nombre, List<String> atributos){
			this.nombre = nombre;
			this.atributos = atributos;
		}
		
		public boolean contieneAtributo(String atributo){
			return atributos!=null && atributos.contains(atributo);
		}

		
		@Override
		public String toString() {
			String texto;
			texto = "Nombre: " + nombre + " Atributos: " + atributos;
			
			return texto;
		}

		@Override
		public boolean equals(Object t) {
			boolean iguales = this.nombre.equals(((Tag) t).nombre);
			
			for(int i=0; i<this.atributos.size() && iguales; i++){
				iguales = ((Tag) t).contieneAtributo(this.atributos.get(i));	
			}
			
			return iguales;
		}
	}
	
	
	
}
